import request, { ApiResponse } from './request'

// 日志信息
export interface LogData {
  id: string
  request_id: string
  user_id?: string
  type: 'api' | 'koa' | 'mysql' | 'redis' | 'error' | 'other'
  level: 'debug' | 'info' | 'warn' | 'error'
  message: string
  data?: string | any
  ip?: string
  method?: string
  url?: string
  created_at: string
}

// 日志详情（data 字段为对象）
export interface LogDetailData extends Omit<LogData, 'data'> {
  data?: {
    status?: number
    duration?: number
    request?: any
    response?: any
    [key: string]: any
  }
}

// 日志列表查询参数
export interface LogListParams {
  page?: number
  pageSize?: number
  type?: 'api' | 'koa' | 'mysql' | 'redis' | 'error' | 'other'
  level?: 'debug' | 'info' | 'warn' | 'error'
  userId?: string
  requestId?: string
  startTime?: string
  endTime?: string
  keyword?: string
}

// 日志列表响应
export interface LogListResponse {
  list: LogData[]
  total: number
  page: number
  pageSize: number
}

// 日志详情参数
export interface LogDetailParams {
  id: string
}

// 删除旧日志参数
export interface DeleteOldLogsParams {
  days?: number
}

// 删除旧日志响应
export interface DeleteOldLogsResponse {
  message: string
  deletedCount: number
  cutoffDate: string
}

// 日志统计参数（根据 API 文档，请求体可以是空对象）
export interface LogStatsParams {
  // 可选，API 文档显示请求体可以是空对象
}

// 日志统计响应（根据 API 文档）
export interface LogStatsResponse {
  total: number // 日志总数（所有日志）
  typeStats: Array<{
    type: string
    count: number
  }> // 各个类型日志数（按类型分组统计，按数量降序排列）
  levelStats: Array<{
    level: string
    count: number
  }> // 各个级别日志数（按级别分组统计，按数量降序排列）
  todayCount: number // 今天日志数（从今天 00:00:00 开始的日志数量）
}

// 查询日志列表
export const getLogList = (data?: LogListParams): Promise<ApiResponse<LogListResponse>> => {
  return request.post<LogListResponse>('/logs/list', data || {})
}

// 查询日志详情
export const getLogDetail = (data: LogDetailParams): Promise<ApiResponse<LogDetailData>> => {
  return request.post<LogDetailData>('/logs/detail', data)
}

// 删除旧日志
export const deleteOldLogs = (data?: DeleteOldLogsParams): Promise<ApiResponse<DeleteOldLogsResponse>> => {
  return request.post<DeleteOldLogsResponse>('/logs/delete-old', data || {})
}

// 获取日志统计
export const getLogStats = (data?: LogStatsParams): Promise<ApiResponse<LogStatsResponse>> => {
  return request.post<LogStatsResponse>('/logs/stats', data || {})
}

// 超频请求数据
export interface AbnormalLogData {
  ip: string
  url: string
  count: number
  threshold: number
  windowSeconds: number
  windowStart: string
  windowEnd: string
  userId?: string
  firstRequestTime: string
  lastRequestTime: string
  sampleLogs: Array<{
    id: string
    requestId: string
    userId?: string
    createdAt: string
    message: string
  }>
}

// 超频请求查询参数
export interface AbnormalLogParams {
  page?: number
  pageSize?: number
  ip?: string
  userId?: string
  startTime?: string
  endTime?: string
  url?: string
  windowSeconds?: number
  threshold?: number
}

// 超频请求列表响应
export interface AbnormalLogResponse {
  list: AbnormalLogData[]
  total: number
  page: number
  pageSize: number
}

// 筛选超频请求
export const getAbnormalLogs = (data?: AbnormalLogParams): Promise<ApiResponse<AbnormalLogResponse>> => {
  return request.post<AbnormalLogResponse>('/logs/abnormal', data || {})
}

